package com.feign.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

@Data
@NoArgsConstructor
public class FileInfo {

    /**
     * 文件名
     */
    private String fileName;

    /**
     * 文件路径
     */
    private String filePath;

    /**
     * 文件大小
     */
    private Long size;

    /**
     * 文件后缀
     */
    private String suffix;

    /**
     * 文件夹
     */
    private Boolean folder;

    /**
     * 文件
     */
    private Boolean file;

    /**
     * 隐藏文件
     */
    private Boolean hidden;

    /**
     * 修改日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date lastModified;

    /**
     * 文件类型转换前端可读文件类型
     * @param file 文件
     * @return 前端可读文件
     */
    public static FileInfo fileToFileInfo(File file) {
        FileInfo fileInfo = new FileInfo();
        fileInfo.setFileName(file.getName());
        fileInfo.setFilePath(file.getAbsolutePath());
        fileInfo.setSuffix(file.isFile() && file.getName().contains(".") ? file.getName().substring(file.getName().lastIndexOf(".")) : null);
        fileInfo.setFolder(file.isDirectory());
        fileInfo.setFile(file.isFile());
        fileInfo.setSize(fileInfo.getFile() ? file.length() : null);
        fileInfo.setHidden(file.isHidden());
        fileInfo.setLastModified(new Date(file.lastModified()));
        return fileInfo;
    }

    /**
     * 文件数组转换为前端可读文件类型
     * @param files 文件数组
     * @return 前端可读文件集合
     */
    public static List<FileInfo> filesToFileInfoList(File[] files){
        if(files == null) return new ArrayList<>();

        List<FileInfo> collect = Arrays.stream(files)
                .map(item -> FileInfo.fileToFileInfo(item))
                .collect(Collectors.toList());

        return collect;
    }

    /**
     * 文件数组转换为前端可读文件类型
     * @param fileList 文件集合
     * @return 前端可读文件集合
     */
    public static List<FileInfo> filesToFileInfoList(List<File> fileList){
        if(fileList.size() == 0) return new ArrayList<>();

        List<FileInfo> collect = fileList.stream()
                .map(item -> FileInfo.fileToFileInfo(item))
                .collect(Collectors.toList());

        return collect;
    }

}
